home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 140
/
Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z
/
Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin
/
tools
/
dshell
/
dsh333bs.lzh
/
fontsub.s
< prev
next >
Wrap
Text File
|
1999-08-10
|
3KB
|
147 lines
*****************************************************************
* DSHELL v3.3x 16ドットフォント切り替え部 *
* Copyright 1999 Toshiyuki Murata *
*****************************************************************
.cpu 68000
.include doscall.mac
.include iocscall.mac
*
.ifndef _FNTADR
_FNTADR equ $16
.endif
*
.xdef _setFont16
.xdef _getFont16
.xdef _setHanFont16
*
* 16ドットフォントを切り替える
*
* void setFont16(FNTADR_TABLE *table);
*
* table: 区 (0=半角) ごとの文字パターンアドレスのテーブル
* NULL ならIOCS FNTADR をリセット
*
_setFont16:
move.l 4(sp),d0
beq resetFont16
movea.l d0,a1
move.l (a1)+,d1
moveq.l #8,d2
IOCS $38
lea.l font16_16(pc),a0
move.l a1,(a0)+
tst.l (a0)
bne @f
lea.l dFNTADR(pc),a1
move.w #$100+_FNTADR,d1
IOCS _B_INTVCS
move.l d0,(a0)
@@: rts
resetFont16: lea.l orgFNTADR(pc),a0
move.l (a0),d0
beq @f
movea.l d0,a1
move.w #$100+_FNTADR,d1
IOCS _B_INTVCS
clr.l (a0)
@@: rts
*
* 16フォントテーブルの取得
*
* void getFont16_16(FNTADR_TABLE *table);
*
* table: 区 (0=半角) ごとの文字パターンアドレスのテーブル
*
_getFont16:
move.l d3,a1
move.l d4,a2 *{
movea.l 4(sp),a0
moveq.l #(8<<1)+1,d2
ror.l #1,d2
IOCS $38
move.l d0,(a0)+
move.w #$2121,d3
moveq.l #$7f-$21-1,d4
getFontLoop: move.w d3,d1
moveq.l #8,d2
IOCS _FNTADR
move.l d0,(a0)+
addi.w #$100,d3
dbra d4,getFontLoop
move.l a2,d4 *}
move.l a1,d3
rts
*
* 16ドット半角フォントを切り替える
*
* void setHanFont16(void *pat);
*
_setHanFont16:
move.l 4(sp),d1
moveq.l #8,d2
IOCS $38
rts
*
* IOCS FNTADR
*
chain: move.l orgFNTADR(pc),-(sp)
rts
*
dFNTADR:
move.w d2,d0
beq @f
subq.w #8,d0
bne chain
@@: cmpi.w #$8140,d1
bcs chain
cmpi.w #$f000,d1
bcc chain
move.b d1,d0
lsr.w #5-2,d0
andi.b #-4,d0
move.l lowByteTable(pc,d0.w),d0
btst.l d1,d0
beq chain
tst.b d1
bpl @f
subq.b #1,d1
@@: subi.b #$40,d1
move.w d1,d0
subi.w #$8100,d0
lsr.w #8,d0
mulu.w #188,d0
moveq.l #0,d2
move.b d1,d2
add.l d0,d2
divu.w #94,d2
add.l d2,d2
add.l d2,d2
movea.l font16_16(pc),a0
move.l (a0,d2.w),d0
swap.w d2
lsl.w #5-2,d2
ext.l d2
add.l d2,d0
moveq.l #2-1,d1
moveq.l #16-1,d2
rts
*
lowByteTable: .dc.l %00000000_00000000_00000000_00000000 *(LSB)00-1f(MSB)
.dc.l %00000000_00000000_00000000_00000000 *20-3f
.dc.l %11111111_11111111_11111111_11111111 *40-5f
.dc.l %01111111_11111111_11111111_11111111 *60-7f
.dc.l %11111111_11111111_11111111_11111111 *80-9f
.dc.l %11111111_11111111_11111111_11111111 *a0-bf
.dc.l %11111111_11111111_11111111_11111111 *c0-df
.dc.l %00011111_11111111_11111111_11111111 *e0-ff
*
font16_16: .ds.l 1 *┐
orgFNTADR: .ds.l 1 *┘
.end